<?php
/**
 * Created by PhpStorm.
 * User: jswei
 * Date: 2019/3/13
 * Time: 0:32
 */
namespace app\admin\controller;

class Prize extends Base {

    public function __construct(){
        parent::__construct();
    }

    public function start(){
        $prize_arr = array(
            0=>array( 'id'=>1,'prize'=>'现金500W','v'=>1 ), //概率为1/200
            1=>array( 'id'=>2,'prize'=>'iphone7','v'=>5 ),
            2=>array( 'id'=>3,'prize'=>'耐克跑鞋','v'=>10 ),
            3=>array( 'id'=>4,'prize'=>'魔声耳机','v'=>24 ),
            4=>array( 'id'=>5,'prize'=>'蓝牙音响','v'=>60 ),
            5=>array( 'id'=>6,'prize'=>'现金1元','v'=>100 )
        );
        //如果中奖数据是放在数据库里，这里就需要进行判断中奖数量
        //在中1、2、3等奖的，如果达到最大数量的则unset相应的奖项，避免重复中大奖
        //code here eg:unset($prize_arr['0'])
        foreach ($prize_arr as $key => $val) {
            $arr[$val['id']] = $val['v'];
        }
        $rid = get_rand($arr); //根据概率获取奖项id
        $res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项
        //将中奖项从数组中剔除，剩下未中奖项，如果是数据库验证，这里可以省掉
        unset($prize_arr[$rid-1]);
        shuffle($prize_arr); //打乱数组顺序
        for($i=0;$i<count($prize_arr);$i++){
            $pr[] = $prize_arr[$i]['prize'];
        }
        $res['no'] = $pr;
        echo json_encode($res);
    }
    //$res = get_rand($item);
    //$prize = $prize_arr[$res-1]['prize'];
    //echo $prize;
    public function  get_rand($item){
        $num = array_sum($item);//计算出分母200
        foreach( $item as $k => $v ){
              $rand = mt_rand(1, $num);//概率区间(整数) 包括1和200
              /*
               *这个算法很666
               */
              if($rand <= $v ){
                  //循环遍历,当下标$k = 1的时候，只有$rand = 1 才能中奖
                 $result = $k;
                 echo $rand.'--'.$v;
                 break;
              }else{
                //当下标$k=6的时候，如果$rand>100 必须$rand < = 100 才能中奖 ，
                //那么前面5次循环之后$rand的概率区间= 200-1-5-10-24-60 （1,100） 必中1块钱
                $num-=$v;
                echo '*'.$rand.'*'."&ensp;"."&ensp;"."&ensp;";
              }
        }
        return $result;
    }
}